simple AES
Cryptography used by vanishing.page. Works in browsers and node.
This is generally useful as a dead simple way of working with symmetric keys in a browser or node.
Thanks to Fission, the original author for much of this code.
install
npm i -S @bicycle-codes/simple-aes
use
bundler
Just import
import {
decryptMessage,
encryptMessage,
type Message
} from '@bicycle-codes/simple-aes'
pre-bundled
This exposes pre-bundled & minified JS files.
copy
cp ./node_modules/@bicycle-codes/simple-aes/dist/compat.min.js ./public
cp ./node_modules/@bicycle-codes/simple-aes/dist/index.min.js ./public/simple-aes.min.js
link
<body>
<script type="module" src="./compat.min.js"></script>
<script type="module" src="./simple-aes.min.js"></script>
</body>
API
@bicycle-codes/simple-aes
Use the webcrypto
API. This will only work in newer browsers.
import {
decryptMessage,
encryptMessage,
type Message
} from '@bicycle-codes/simple-aes'
@bicycle-codes/simple-aes/compat
Use a user-land module, @noble/ciphers. This will work in browsers of all ages.
import {
encryptMessage,
decryptMessage
} from '@bicycle-codes/simple-aes/compat'
encryptMessage
Generate a new AES key and encrypt the given message object.
Return an array of [ encryptedMessage, { key }]
,
where key
is a new AES key, encoded as base64url
.
async function encryptMessage (
msg:{ content:string }
):Promise<[{ content:string }, { key }]>
encrypt example
import { encryptMessage } from '@bicycle-codes/simple-aes'
const [encryptedMsg, { key }] = await encryptMessage({
content: 'hello world'
})
console.log(encryptedMessage)
decryptMessage
Decrypt the given message with the given key. Suitable for decrypting a message that was encrypted by this library. Key is an AES key, base64url
encoded.
async function decryptMessage (
msg:{ content:string },
keyString:string
):Promise<{ content:string }>
decrypt example
import { test } from '@bicycle-codes/tapzero'
import { decryptMessage } from '@bicycle-codes/simple-aes'
test('decrypt the message', async t => {
const decrypted = await decryptMessage(message, key)
t.equal(decrypted.content, 'hello world',
'should decrypt to the right text')
})